package cn.iocoder.yudao.module.system.job;

import cn.iocoder.yudao.module.system.controller.admin.otherService.vo.ApiCallCount;
import cn.iocoder.yudao.module.system.service.otherService.RecordQuery;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Description: 分析日志
 * @Author: meiwanli
 * @Date: 2025-10-15 14:35
 */

@Component
@Slf4j
public class AnalysisLogTask {

    @Resource
    private RecordQuery recordQuery;

    // 每30分钟执行一次
    @Scheduled(cron = "0 0/30 * * * ?")
    public void analysisLog() {
        log.info("开始执行分析日志，获取今日调用次数");
        String serviceLog = recordQuery.getServiceLog(1);

        // 1. 定义关键标识：今日访问次数的前缀
        String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
        String accessCountPrefix = "今日访问次数" + today + ":";

        // 2. 找到最后一个"今日访问次数"的起始索引
        int lastPrefixIndex = serviceLog.lastIndexOf(accessCountPrefix);

        String maxAccessCount = "未找到今日访问次数";
        if (lastPrefixIndex != -1) {
            // 3. 从前缀后开始截取，直到遇到第一个非数字字符（如"."或"，"）
            int startIndex = lastPrefixIndex + accessCountPrefix.length();
            StringBuilder countBuilder = new StringBuilder();

            // 4. 遍历截取数字（访问次数为纯数字）
            for (int i = startIndex; i < serviceLog.length(); i++) {
                char c = serviceLog.charAt(i);
                if (Character.isDigit(c)) {
                    countBuilder.append(c);
                } else {
                    break; // 遇到非数字则停止，避免包含后续字符
                }
            }
            // 5. 转换为字符串形式的最大值（如需int类型可直接用Integer.parseInt()）
            maxAccessCount = countBuilder.toString();
        }
        ApiCallCount apiCallCount = new ApiCallCount();
        apiCallCount.setInterfaceId("1");
        apiCallCount.setInterfaceName("车辆送修");
        apiCallCount.setCount(Integer.parseInt(maxAccessCount));
        // 设置统计时间格式为 yyyy-MM-dd
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        apiCallCount.setStatisticalTime(dateFormat.format(new Date()));
        recordQuery.updateByStatisticalTime(apiCallCount);
    }

}
